home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / bin / lcf < prev    next >
Text File  |  2008-05-30  |  8KB  |  261 lines

  1. #!/bin/bash
  2. #                               -*- Mode: Sh -*- 
  3. # lcf --- 
  4. # Author           : Manoj Srivastava ( srivasta@glaurung.green-gryphon.com ) 
  5. # Created On       : Mon Feb 25 12:04:52 2002
  6. # Created On Node  : glaurung.green-gryphon.com
  7. # Last Modified By : Manoj Srivastava
  8. # Last Modified On : Mon Feb 25 12:06:54 2002
  9. # Last Machine Used: glaurung.green-gryphon.com
  10. # Update Count     : 2
  11. # Status           : Unknown, Use with caution!
  12. # HISTORY          : 
  13. # Description      : 
  14.  
  15. # make sure we exit on error
  16. set -e
  17.  
  18. # set the version and revision
  19. progname="`basename \"$0\"`"
  20. pversion='$Revision: 1.1 $'
  21.  
  22. ######################################################################
  23. ########                                                     #########
  24. ########              Utility functions                      #########
  25. ########                                                     #########
  26. ######################################################################
  27. setq() {
  28.     # Variable Value Doc_string
  29.     if [ "x$2" = "x" ]; then
  30.     echo >&2 "$progname: Unable to determine $3"
  31.     exit 1;
  32.     else
  33.     if [ "x$VERBOSE" != "x" ]; then
  34.         echo "$progname: $3 is $2";
  35.     fi
  36.     eval "$1=\"\$2\"";
  37.     fi
  38. }
  39.  
  40. withecho () {
  41.         echo " $@" >&2
  42.         "$@"
  43. }
  44.  
  45. usageversion () {
  46.         cat >&2 <<END
  47. Debian GNU/Linux $progname $pversion.
  48.            Copyright (C) 2002 Manoj Srivastava.
  49. This is free software; see the GNU General Public Licence for copying
  50. conditions.  There is NO warranty.
  51.  
  52. Usage: $progname  [options] dest_file  src_dir
  53. Options:
  54.      -h,     --help          print this message
  55.      -s foo, --src-dir  foo  Set the src dir (historical md5sums live here)
  56.      -d [n], --debug    [n]  Set the Debug level to N
  57.      -n,     --no-action     Dry run. No action is actually taken.
  58.      -v,     --verbose       Make the script verbose
  59.  
  60. By default, the directory the new_file lives in is assumed to be the src-dir,
  61. which is where we look for any historical md5sums.
  62.  
  63. END
  64. }
  65.  
  66. ######################################################################
  67. ########                                                     #########
  68. ########              Command line args                      #########
  69. ########                                                     #########
  70. ######################################################################
  71. #
  72. # Long term variables#
  73. #
  74. docmd='YES'
  75. action='withecho'
  76. DEBUG=0
  77. VERBOSE=''
  78. statedir='/var/lib/ucf';
  79.  
  80.  
  81. # Note that we use `"$@"' to let each command-line parameter expand to a
  82. # separate word. The quotes around `$@' are essential!
  83. # We need TEMP as the `eval set --' would nuke the return value of getopt.
  84. TEMP=`getopt -o hs:d:D::nv -n "$progname" \
  85.              --long help,src-dir:,dest-dir:DEBUG::,no-action,verbose \
  86.              -- "$@"`
  87.  
  88. if [ $? != 0 ] ; then
  89.     echo "Error handling options.Terminating..." >&2 ;
  90.     exit 1 ;
  91. fi
  92.  
  93. # Note the quotes around `$TEMP': they are essential!
  94. eval set -- "$TEMP"
  95.  
  96. while true ; do
  97.     case "$1" in
  98.     -h|--help) usageversion;                                exit 0 ;;
  99.     -n|--no-action) action='echo'; docmd='NO';              shift  ;;
  100.     -v|--verbose) VERBOSE=1;                                shift  ;;
  101.     -s|--src-dir)
  102.         opt_source_dir="$2";                                shift 2 ;;
  103.     -d|--debug)
  104.             # d has an optional argument. As we are in quoted mode,
  105.             # an empty parameter will be generated if its optional
  106.             # argument is not found.
  107.         case "$2" in
  108.         "") setq DEBUG 1    "The Debug value"; shift 2 ;;
  109.         *)  setq DEBUG "$2" "The Debug value"; shift 2 ;;
  110.         esac ;;
  111.     --)  shift ;                                             break ;;
  112.     *) echo "Internal error!" ; exit 1 ;;
  113.     esac
  114. done
  115.  
  116. if [ $# != 2 ]; then
  117.     echo >&2 "*** ERROR: Need exactly two arguments, got $#";
  118.     echo >&2 ""
  119.     usageversion;
  120.     exit 0 ;
  121. fi
  122.  
  123. setq dest_file  "$1" "The Destination file";
  124. setq source_dir "$2" "The source directory";
  125.  
  126.  
  127. # Load site defaults and over rides.
  128. if [ -f /etc/ucf.conf ]; then
  129.     . /etc/ucf.conf
  130. fi
  131.  
  132. # Command line, env variable, config file, or default
  133. if [ "X$source_dir" = "X" ]; then    
  134.     if [ ! "x$opt_source_dir" = "x" ]; then
  135.     setq source_dir "$opt_source_dir" "The Source directory"
  136.     elif [ ! "x$UCF_SOURCE_DIR" = "x" ]; then
  137.     setq source_dir "$UCF_SOURCE_DIR" "The Source directory"
  138.     elif [ ! "x$conf_source_dir" = "x" ]; then
  139.     setq source_dir "$conf_source_dir" "The Source directory"
  140.     fi
  141. fi
  142.  
  143. if [ ! -d "$source_dir" ]; then
  144.     echo >&2 "The source dir does not exist. Stopping now."
  145.     exit 2;
  146. fi
  147.  
  148. if [ "X$dest_file" = "X" ]; then
  149.     echo >&2 "Uknown file to search for. Stopping now."
  150.     exit 2;
  151. fi
  152.  
  153. old_mdsum_dir="$source_dir/"$(basename "${new_file}")".md5sum.d";
  154. old_mdsum_file="$source_dir/"$(basename "${new_file}")".md5sum";
  155.  
  156.  
  157. if [ -e "$statedir/hashfile" -a ! -r "$statedir/hashfile" ]; then
  158.     echo >&2 "$progname: do not have read privilege to the state data"
  159.     if [ "X$docmd" = "XYES" ]; then
  160.     exit 1;
  161.     fi
  162. fi 
  163.  
  164. # test and see if this file exists in the database
  165. if [ -e "$statedir/hashfile" ]; then
  166.     if [ "X$VERBOSE" != "X" ]; then 
  167.     echo >&2 "The hash file exists";
  168.     echo grep "[[:space:]]${dest_file}$" "$statedir/hashfile";
  169.     grep "[[:space:]]${dest_file}$" "$statedir/hashfile" ;
  170.     fi 
  171.     lastsum=$(grep "[[:space:]]${dest_file}$" "$statedir/hashfile" | \
  172.                    awk '{print $1;}' );
  173. fi
  174.  
  175. if [ "X$lastsum" = "X" ]; then
  176.     echo >&2 "$progname: No record of file in databse. Stopping now."
  177.     exit 2;
  178. fi
  179.  
  180. if [ $DEBUG -gt 0 ]; then
  181.     cat <<EOF
  182. The new start file is      \`$new_file\'
  183. The destination is         \`$dest_file\'
  184. The history is kept under  \'$source_dir\'
  185. EOF
  186.     if [ -s "$dest_file" ]; then
  187.     echo "The destination file exists, and has md5sum:"
  188.     md5sum "$dest_file"
  189.     else
  190.     echo "The destination file does not exist."
  191.     fi
  192.     if [ "X$lastsum" != "X" ]; then
  193.     echo "The old md5sum exists, and is:"
  194.     echo $lastsum
  195.     else 
  196.     echo "The old md5sum does not exist."
  197.     fi
  198.     if [ -e "$new_file" ]; then
  199.     echo "The new file exists, and has md5sum:"
  200.     md5sum "$new_file"
  201.     else 
  202.     echo "The new file does not exist."
  203.     fi
  204.     if [ -d "$old_mdsum_dir" ]; then
  205.     echo "The historical md5sum dir $old_mdsum_dir exists"
  206.     elif [ -f "$old_mdsum_file" ]; then
  207.     echo "The histotical md5sum file $old_mdsum_file exists"
  208.     else
  209.     echo "Historical md5sums are not available"
  210.     fi
  211. fi
  212.  
  213. if [ -d "$old_mdsum_dir" -o -f "$old_mdsum_file" ]; then
  214.     if [ -d "$old_mdsum_dir"  ]; then
  215.     for file in ${old_mdsum_dir}/*; do
  216.         oldsum=$(cat "$file"  | awk '{print $1}');
  217.         if [ "$oldsum" = "$destsum"  ]; then
  218. #               Bingo!
  219.         echo $(cat "$file"  | awk '{print $2}');
  220.         exit 0;
  221.         fi
  222.     done
  223.     elif [ -f "$old_mdsum_file" ]; then
  224.     oldsum=$(grep "^${destsum}" "$old_mdsum_file")
  225.     if [ "X$oldsum" != "X" ]; then
  226. #        Bingo
  227.         echo  $(grep "^${destsum}" "$old_mdsum_file" | awk '{print $2}')
  228.         exit 0;
  229.     fi
  230.     fi
  231. #       Well, nothing matched. We now check to see if the
  232. #       maintainer has an opinion on how to set the ``md5sum of the
  233. #       previously installed version'', since we have no way of
  234. #       determining that automatically. Please note that unless
  235. #       there are limited number of previously released packages
  236. #       (like just one), the maintainer is also making a guess at
  237. #       this point by supplying a historical md5sum default file. 
  238.     if [ "X$VERBOSE" != "X" ]; then
  239.     echo >&2 "Histotical md5sums did not match."
  240.     fi
  241.     if [ -d "$old_mdsum_dir"  ]; then
  242.     if [ -e "${old_mdsum_dir}/default" ]; then
  243.         echo default;
  244.         exit 0;
  245.     fi
  246.     elif [ -f "$old_mdsum_file" ]; then
  247.     oldsum=$(grep "[[:space:]]default$" "$old_mdsum_file" | \
  248.         awk '{print $1;}')
  249.     if [ "X$oldsum" != "X" ]; then
  250. #                    Bingo
  251.         echo default;
  252.         exit 0;
  253.     fi
  254.     fi
  255. fi
  256.  
  257.  
  258. exit 0;
  259.